// 参考文档
// https://juejin.cn/post/6904448197079351303?utm_source=gold_browser_extension

// // 原型继承

// function Parent(age){
//   this.name="kecin"
//   this.age=age
//   this.list=[1,2,3]
// }

// Parent.prototype.getName=function(){
//   console.log(this.name)
// }

// function Child(){

// }

// Child.prototype=new Parent(12)
// Child.prototype.constructor=Child

// var child1=new Child();
// var child2=new Child();
// child1.list.push(4)
// console.log(child1.list)

// console.log(child2.list)
// child1.name = 'zhaosi' // 这里相当于为实例child1添加了一个name属性，就不会去读原型上的name了
// // console.log(child1.name) // 'zhaosi'
// // console.log(child2.name) // 'kevin'
// console.log(child1.age) // 'zhaosi'

// // 构造函数继承

// function Parent(age){
//   this.names=['kevin','daisy'];
//   this.age=age
// }
// function Child(age){
//   Parent.call(this,age)
// }

// var child1=new Child();
// child1.names.push('yayu');

// console.log(child1.names);

// var child2 = new Child(22);

// console.log(child2.names); // ["kevin", "daisy"]
// console.log(child2.age);


// // 组合继承
// function Parent(name){
//   this.name=name;
//   this.colors=['rd','blue','green']
// }

// Parent.prototype.getName=function(){
//   console.log(this.name)
// }

// function Child(name,age){
//   Parent.call(this,name)
//   this.age=age;
// }

// Child.prototype=new Parent();
// Child.prototype.constructor=Child;
// console.log(Child.prototype.constructor)


// var child1=new Child('kevin','18');

// child1.colors.push("black")

// console.log(child1.name); // kevin
// console.log(child1.age); // 18
// console.log(child1.colors); // ["red", "blue", "green", "black"]

// var child2 = new Child('daisy', '20');

// console.log(child2.name); // daisy
// console.log(child2.age); // 20
// console.log(child2.colors); // ["red", "blue", "green"]


// // 4.寄生组合继承
// function Parent (name) {
//   this.name = name;
//   this.colors = ['red', 'blue', 'green'];
// }

// Parent.prototype.getName = function () {
//   console.log(this.name)
// }

// function Child (name, age) {

//   Parent.call(this, name); // 第二次调用
  
//   this.age = age;

// }

// Child.prototype = Parent.prototype;
// Child.prototype.constructor = Child; // 修正构造函数的指向


function Parent (name) {
  this.name = name;
  this.colors = ['red', 'blue', 'green'];
}

Parent.prototype.getName = function () {
  console.log(this.name)
}

function Child (name, age) {
  Parent.call(this, name);
  this.age = age;
}

// 关键的三步
// 1、
// var F = function () {};
// F.prototype = Parent.prototype;
// Child.prototype = new F();

// // 2、
// Child.prototype=Object.assign({},Parent.prototype)

// 3、
Child.prototype=Object.create(Parent.prototype)


Child.prototype.constructor=Child

var child1 = new Child('kevin', '18');

console.log(child1.getName());
